Dieser Discompiler erzeugt aus compilierten Visual Basic (VB) Programmen die kompletten Quelldateien, einschlie▀lich der Forms. Er soll in dieser Version nicht dazu dienen, fremde Programme zu knacken, sondern demonstrieren, wieviele Teile des Sourcecodes vom Compiler in die ausfⁿhrbaren Programme ⁿbernommen wurden. Ich halte dies fⁿr ein bedenkliches Zeichen, fⁿr welches Programm sind denn diese Informationen bestimmt? Das Laufzeitsystem ben÷tigt sie nicht, und doch wurden sie teilweise absichtlich in das Programm ⁿbernommen.
Die Installation des Discompilers ist einfach:
Kopieren Sie das Archiv in ein neues Verzeichnis (z.B. VBDIS) und packen Sie es aus. Wenn Sie dies bereits getan haben, finden Sie neben dem Programm VBDIS3.EXE noch einige Datenfiles, die fⁿr die Discompilierung ben÷tigt werden. Eine Installation ist nicht notwendig, der Discompiler ben÷tigt keine EintrΣge in WIN.INI usw.
Die Bedienung des Discompilers ist ebenfalls einfach:
- Programm starten, aus dem Menⁿ '╓ffnen' wΣhlen und das gewⁿnschte Programm angeben.
- Das Verzeichnis wΣhlen, in dem die Quellen erzeugt werden sollen. Mit 'Neu' kann ein neues Verzeichnis mit dem darⁿber angegebenen Namen erstellt werden. Der gewΣhte Ordner mu▀ vor dem Verlassen dieses Dialogs ge÷ffnet dargestellt sein!
- Nun legt der Discompiler los und erzeugt die Quellfiles, sofern es sich um ein Programm von VB 3.0 handelt. Sollten Sie versuchen, ein anderes Programm, den Discompiler selbst oder ein anderes geschⁿtztes Programm zu discompilieren, erscheint eine Fehlermeldung.
- Im ersten Durchlauf erzeugt der Discompiler mehrere BAS-Files im Textformat sowie die FRM-Files, diese allerdings im BinΣrformat. Sobald er fertig ist, rufen Sie VB mit dem erzeugten Makefile auf und speichern alle Forms ebenfalls im Textformat. Dieser Schritt ist leider notwendig, da die Erzeugung der Forms im Textformat ohne Mithilfe der Custom-Controls (VBX) oft nicht m÷glich ist. Speichern Sie dann das Projekt ab und verlassen Sie den Interpreter.
- Anschlie▀end wΣhlen Sie im Menⁿ des Discompilers 'Forms zusammenfⁿgen', und der Code wird an die Forms angehΣngt. (Geht natⁿrlich auch mit einem Editor, aber nicht so schnell).
- Fertig - das Programm kann nun im Interpreter gestartet werden.
WΣhrend der Discompilierung k÷nnen Fehler gemeldet werden, die (hoffentlich) abgefangen werden und das Programm nicht abstⁿrzen lassen. Bitte beachten Sie die Kommentare hierzu, die zugrundeliegenden Tabellen wurden ohne Disassemblierung des Laufzeitsystems erstellt, so da▀ sie nicht unbedingt komplett sind. Auch einige Konstruktionen in den Programmen k÷nnen zu Fehlern fⁿhren, sofern sie bislang noch nicht aufgetreten sind und daher nicht bekannt ist, wie sie zu behandeln sind.
Die Beschreibungen von Custom-Controls liegen in Datenfiles mit der Extension '300' (fⁿr VB 3.0). Sollte das Programm neben den mitgelieferten Controls weitere VBX-Dateien verwenden, kann der Discompiler diese natⁿrlich nicht richtig interpretieren. Hier hilft das Programm VBCtrl, das VBX-Dateien analysiert und fⁿr die Verwendung im Discompiler abspeichert. Wenn der Discompiler auf ein unbekanntes Control st÷▀t, k÷nnen Sie VBCtrl starten, die Beschreibung des Controls abspeichern und anschlie▀end weiter discompilieren.
Beim Starten des Programms kann der Interpreter einige Fehler finden, hauptsΣchlich fehlende oder falsche Variablentypen, sowie falsche Argumente beim Aufruf von Funktionen. Diese Angaben mⁿssen Sie selbst ermitteln und korrigieren, die Vergabe von Namen und Datentypen fⁿr die Variablen und Funktionen ist nur in der Profi-Version m÷glich. Beim Vergleich mit Ihrem Quellcode entdecken Sie m÷glicherweise fehlende Variablen und Konstanten, sowie seltsame Parameterlisten von Unterprogrammen (p,p,p); diese Symptome stammen alle von Variablen bzw. Unterprogrammen und Parametern, die im Programm garnicht verwendet werden, so da▀ der Discompiler die Datentypen nicht ermitteln kann.
Beachten Sie im Quellcode die Namen der Forms und Controls, die der Compiler in das ausfⁿhrbare Programm hineingepackt hat, und die exakte Einrⁿckung aller Zeilen, die ebenfalls mit viel Aufwand aus dem Quellcode ⁿbernommen wurde. Bei jeder Variablen wird peinlich genau vermerkt, ob sie im Quellcode mit oder ohne Typ-Kennzeichen angegeben wurde. Sie k÷nnen das mit eigenen Programmen ganz leicht austesten und die erzeugten Quellen mit Ihrem Code vergleichen.
VBCtrl - DAS Custom Control Tool
VBCtrl analysiert EXE- und VBX-Dateien und extrahiert die Properties und Events der darin gespeicherten Controls. Die Bedienung erfordert ein paar Kenntnisse, die hier im Schnelldurchgang vermittelt werden sollen.
Starten Sie VBCtrl und ÷ffnen Sie die gewⁿnschte Datei. Alle Dateien vom Typ VBX werden automatisch nΣher analysiert und es erscheint ein Fenster mit mehreren Listen. In der linken Liste sind alle m÷glichen Entrypoints der Datei aufgelistet. Ihre Aufgabe besteht nun darin, alle Prozeduren zu finden, die zu den Custom Controls geh÷ren.
In den meisten VBX sind die Control-Prozeduren am Namen xxxCTRLPROC zu erkennen (brav vom CDK abgeschrieben). WΣhlen Sie nun den ersten dieser Namen an. Daraufhin erscheint im mittleren Fenster eine Liste aller Verweise auf diese Prozedur, von denen eine die gesuchte Control-Tabelle sein sollte. Wenn Sie keinen entsprechenden Namen finden, oder wenn die vermeintlichen Tabellen nicht richtig interpretiert werden k÷nnen, probieren Sie der Reihe nach alle (unbenannten) Entrypoints, normalerweise werden Sie auch dann irgendwann einmal fⁿndig.
WΣhlen Sie nun aus dem mittleren Fenster eine Adresse aus, im rechten Fenster wird dann die vermutete Tabelle dargestellt. Bei Fehlermeldungen ist die Wahrscheinlichkeit sehr gering, da▀ Sie eine solche Tabelle gefunden haben. Achten Sie auf den Klassennamen (CN) und Default-Control-Namen (DN), hier sollten lesbare Texte erscheinen. Am ersten Eintrag k÷nnen Sie noch die VB-Version unterscheiden (100=VB1.0, 200=VB2.0, 300=VB3.0), hier sollte unbedingt einer dieser Werte stehen. Einzelheiten zu den angezeigten Werten lesen Sie bitte im CDK nach, jede Zeile entspricht einem Eintrag in der Control-Model Struktur, die Buchstaben am Anfang jeder Zeile sind Kⁿrzel fⁿr die entsprechenden Elemente in der Struktur. Bei mehreren Tabellen mit denselben Control-Namen wΣhlen Sie diejenige mit der h÷chsten Versionsnummer.
Mit dem Button oberhalb der rechten Liste ⁿbernehmen Sie alle Informationen, die zu diesem Steuerelement geh÷ren, in den Katalog, der vom Discompiler fⁿr die Behandlung des Steuerelements ben÷tigt werden. Dieser Katalog wird in einem weiteren Fenster angezeigt.
Die Anzeige der Properties und Events erm÷glicht kleinere Korrekturen, die Sie selbst bei Bedarf durchfⁿhren k÷nnen. Speziell in den Standard-Controls (die in VBRUN300 implementiert sind), fehlen die Namen der Parameter zu den Events, einige Datentypen sind nicht dokumentiert und mⁿssen von Hand nachgetragen werden. Hierzu dient das Edit-Feld ⁿber der Event-Liste, in das Sie die gewⁿnschten Parameter-Strings eintragen k÷nnen. Dies erfolgt am einfachsten ⁿber den Hilfe-Button, mit dem die Information zu dem aktuellen Event angezeigt wird. Dort k÷nnen Sie die Parameterliste ausschneiden und dann in das Edit-Feld einfⁿgen.
Die Standard-Properties sind alles andere als 'Standard', die Datentypen sind nirgends dokumentiert, und einige Namen fehlen. Dies sollte jedoch nicht weiters st÷ren, da diese FΣlle im Discompiler automatisch abgefangen werden bzw. die Properties ohne Namen in einem Programm ja garnicht vorkommen k÷nnen. Auch die Standard-Collections werden im Discompiler automatisch berⁿcksichtigt, und fⁿr Custom-Controls gibt es keine M÷glichkeit, Collections zu definieren oder zu verwenden. Sie sollten jedoch die mitgelieferten Beschreibungen der Standard-Controls (VBRUN300.300) m÷glichst nicht verΣndern, da dort Informationen gespeichert sein k÷nnen, deren Erzeugung mit VBCtrl nicht garantiert werden kann.
Wenn Sie so alle Controls einer VBX-Datei gefunden und katalogisiert haben, speichern Sie die Definitionen ab. Dabei wird eine Datei mit dem Namen der VBX-Datei und der Erweiterung '.300' erzeugt, mit welcher der Discompiler alle Stellen richtig verarbeiten, an denen die Controls in einem Programm verwendet werden.
Gemeinerweise habe ich mich entschlossen, VBCtrl zunΣchst so einzuschrΣnken, da▀ die angezeigten Angaben nicht abgespeichert werden. Dies erm÷glicht zwar das Austesten des Discompilers, aber fast nur mit eigenen Programmen, die keine speziellen Custom-Controls enthalten. Ich betrachte dies auch als einen Schutz aller bislang erschienenen Programme gegen Discompilierung, aber wer seine Programme in Zukunft nicht gegen Discompilierung schⁿtzt, gibt seine Quellen jedem Interessenten in die Hand, der ⁿber einen Discompiler fⁿr Visual Basic verfⁿgt!
In der Lite-Version wird die Abspeicherung in Verbindung mit der Optimierung der Programme m÷glich sein, ich bitte alle Anwender noch um etwas Geduld.
Hinweise
Die aktuelle Version des Discompilers ist 3.38 vom Juli1995, alle Σlteren Versionen k÷nnen sie getrost vergessen. Hierbei handelt es sich noch um eine Beta-Version, die nΣchste offizielle Version wird 3.40 sein. Kleinere Anpassungen k÷nnen durch Auswechseln der Tabellen erfolgen, ohne da▀ das Programm ausgetauscht werden mu▀. Dies kommt speziell in Frage, wenn der Discompiler unbekannte Tokens meldet. In diesem Fall sollten Sie zunΣchst prⁿfen, ob Sie die neuesten Tabellen verwenden, und ggf. das Programm, das zu dieser Fehlermeldung gefⁿhrt hat, an den Autor einsenden, damit die Tabellen auf den neuesten Stand gebracht werden k÷nnen.
Neben der Demo-Version gibt es eine Lite-Version des Discompilers, die gegenⁿber der Demo-Version folgende Vorteile bietet:
- Kein Abbruch bei unbekannten Custom-Controls
- Keine Verz÷gerung des Programmablaufs
- 1 Jahr lang kostenlose Updates
Diese Version k÷nnen Sie mit dem beiliegenden Registrierungs-Formular bestellen.
Immer noch in Arbeit ist eine Profi-Version, die u.a. folgende M÷glichkeiten bieten soll:
- Bearbeitung sehr gro▀er Programme
- Manuelle Vorgabe von Namen und Datentypen fⁿr Variable und Unterprogramme
- Vergleich des erzeugten Codes mit vorhandenen Quelltexten
- Behandlung aller Custom-Controls
- Hinweise auf Optimierungsm÷glichkeiten im Programm
- Optimierung der compilierten Programme
- Ausgabe des Programms in anderen Programmiersprachen (C++, Pascal)
Einige dieser Optionen k÷nnen noch in die Lite-Version ⁿbernommen werden, die Einzelheiten mⁿssen jedoch noch festgelegt werden. Die Profi-Version soll professionell vertrieben werden, und die Verhandlungen sind noch im Gange. Die Optimierung eigener Programme soll auch in der Lite-Version m÷glich sein, der Umfang ist jedoch noch nicht geklΣrt. Da diese Funktion eigentlich zu den VB-Tools geh÷rt und nicht zum Discompiler, wird in Zukunft wohl nur noch ein gemeinsames Paket mit den Tools und dem Discompiler erscheinen, die meisten Anwender haben sich ja gleich fⁿr beides registrieren lassen.
Ausblick
Der Discompiler wird bei der Optimierung Ihrer Programme noch eine wichtige Rolle spielen. Die Entwicklungsversion gestattet z.B. den direkten Vergleich des Sourcecodes mit dem compilierten Code, so da▀ unbekannte Tokens leicht zugeordnet werden k÷nnen. Dies kann jeder Entwickler selbst durchfⁿhren, da diese Informationen alle in Datenfiles gespeichert sind, ─nderungen im Programm sind nicht zu erwarten. Weiterhin k÷nnen die globalen und lokalen Speicherbereiche aufgelistet werden, die Datentypen und Variablennamen k÷nnen von Hand vorgegeben oder aus den Quellen ⁿbernommen werden. Dadurch wird der discompilierte Code vollstΣndiger und kann leichter mit dem Originaltext verglichen werden. Auf Knopfdruck werden sogar alle Namen aus den Quelltexten in die Anzeige der EXE-Datei ⁿbernommen.
Die Anzeige der EXE-Datei listet alle Tokens mit einer kurzen Beschreibung auf. Dort finden Sie dann so sinnlose Angaben wie den Typ eines Feldes, wobei peinlich genau die Spalte in der Zeile angegeben ist, in der diese Angabe im Quelltext stand (!), und sogar der Verweis auf den Typ-Namen ist dort gespeichert, was leider wegen der fehlenden Namenstabelle keinerlei brauchbare Informationen liefern kann (Felder sind sowieso im Variablenbereich genau beschrieben, dieses Token kann mit allen zugeh÷rigen Informationen ersatzlos gestrichen werden).
Weitere Ansatzpunkte bei der Optimierung sind unbenutzte Variablen und Funktionen sowie ⁿberflⁿssige Typ-Konvertierungen, die ebenfalls ersatzlos gestrichen werden k÷nnen. Auf einige Optimierungen haben Sie durch Auswahl der geeigneten Funktionen und Datentypen einen Einflu▀, andere ─nderungen k÷nnen nur per Programm vorgenommen werden, was in der nΣchsten Ausbaustufe geschehen soll. Die ersten AnsΣtze finden sich im Projekt-Manager, der u.a. ⁿberflⁿssige Namen aus den compilierten Programmen entfernt und sie damit auch schon etwas gegen Discompiler schⁿtzt. Alleine diese Funktion sollte jeder Programmierer zum Anla▀ nehmen, sich auch mit meinen ⁿbrigen VB-Tools zu beschΣftigen.
Und damit wΣren wir beim letzten Punkt, nΣmlich der Weiterentwicklung der VB-Tools. Es wurde bereits eine Menge Vorarbeit geleistet, doch die Umsetzung der vorhandenen Entwicklungsversionen in allgemein verwendbare Programme erfordert noch einigen Aufwand. Ich betrachte die Anzahl der Registrierungen als ein Ma▀ fⁿr das Interesse an der Weiterentwicklung der VB-Tools und bitte daher jeden ernsthaften Interessenten, mit Fehlermeldungen, VorschlΣgen und nicht zuletzt mit seiner Registriergebⁿhr dafⁿr zu sorgen, da▀ die Weiterentwicklung zu immer besseren Entwicklungswerkzeugen auch tatsΣchlich stattfinden wird.
Mit dem Erscheinen von Windows 95 und Visual Basic 4.0 stehen neue Aufgaben ins Haus, so da▀ die Entwicklung der Tools zu VB 3.0 bis dahin abgeschlossen sein soll. Dann steht zunΣchst die Portierung der vorhandenen Programme auf die neue Version ins Haus, und die Tools mⁿssen an die neuen Gegebenheiten angepa▀t werden. Einige Funktionen sind bereits in VB 4.0 enthalten, andere mⁿssen in Add-In's zu VB 4.0 konvertiert werden.